package gang.com.mobelhelper.common.rx.subscriber;


import android.content.Context;
import android.util.Log;

import gang.com.mobelhelper.common.exception.BaseException;
import gang.com.mobelhelper.common.rx.RxErrorHandler;

/**
 * Created by Administrator on 2017/11/23.
 */

public abstract class ErrorHandlerSubscriber<T> extends DefaultSubscriber<T> {
    //在这个方法里面就是把那些自带的异常或者服务器的异常，转换为displayMessage，让用户能看懂

    private Context mContext;
    private RxErrorHandler mRxErrorHandler = null;

    public ErrorHandlerSubscriber(Context context) {
        this.mContext = context;
        mRxErrorHandler = new RxErrorHandler(mContext);
    }

    @Override
    public void onError(Throwable e) {
        BaseException baseException = mRxErrorHandler.handleError(e);

        if (baseException == null) {
            e.printStackTrace();
            Log.d("ErrorHandlerSubscriber", e.getMessage());
        } else {
            mRxErrorHandler.showErrorMessage(baseException);
        }
       /*
       由于在这里拿不到context对象，新创建一个RxErrorHandler处理错误逻辑
       BaseException baseException=new BaseException();
       //在封装的这里面进行所有的错误逻辑判断
       //服务端Api错误，网络错误，小区，房子，小区的房子名称
        if (e instanceof ApiException)
        {
            //Api接口自己返回的错误code和信息
            baseException.setCode(((ApiException) e).getCode());
        }else if (e instanceof SocketException)
        {
            //连接错误
            baseException.setCode(BaseException.SOCKET_ERROR);
        }else if (e instanceof SocketTimeoutException)
        {
            //连接超时
            baseException.setCode(BaseException.SOCKET_TIMEOUT_ERROR);
        }else if (e instanceof HttpException)
        {

        }else
        {
            baseException.setCode(BaseException.UNKNOWN_ERROR);
        }
        //接下来根据一个工厂类，把错误消息code转成让用户可以看到的消息
        baseException.setDisplayMessage(ErrorMessageFactory.create());*/
    }

}
